#include <stdio.h> 
 
int main() {
    // step 1# 读取糖果数量
    long long x;
    scanf("%lld", &x); // 从标准输入读取糖果的初始数量

    // step 2# 初始化操作次数
    int count = 0; // 记录最小操作次数
    // error 1# 不是 int i 而是 long long i，否则数据会溢出
    // step 3# 执行操作直到糖果只剩 1 颗
    for (long long i = x; i != 1; i /= 2, count++) {
        // step 4# 特殊情况处理：剩余糖果为 3 时
        if (i == 3) {
            count += 2; // 直接进行两次操作：3->2->1
            break;
        }
        // error 2# 只有 i 是奇数的时候才需要加减一个
        // step 5# 当前糖果数为奇数时进行调整
        if (i % 2 != 0) {
            // error 3# 是除 2 后再 区域
            // step 6# 判断是加 1 还是减 1，使下一步除 2 后结果更优
            if ((i + 1) / 2 % 2 == 0) {
                i++;  // 若加 1 后能整除 2 并为偶数，则加1
            } else {
                i--;  // 否则减 1
            }
            count++; // 调整操作也算一次
        }
    }

    // step 7# 输出最小操作次数
    printf("%d", count); // 打印最终操作次数

    return 0;
}
